草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - unique_ptr 作为模板参数

为什么要在VS2017中编译?#include#includeusingnamespacestd;structx{x(){coutvoidfoo(T&&item){structboo{Titem;boo(T&&t):item(std::move(t)){}};newboo(std::move(item));}intmain(){std::unique_ptrb(newx);foo(b);//IwouldexpectthatIshouldputstd::move(b)here.}按照编写的代码,输出是x()~x()如果foo(b)行写为foo(std::move(b)),那么输出就是x(

c++ - 处理数组时 make_unique 和 make_shared 之间的区别

从C++17开始,您可以使用make_unique为了创建指向数组的智能指针,例如:unique_ptrptr=make_unique(10);这将创建一个指向10个元素数组的智能指针(将调用适当的deleter[]的事实也很棒)。但是根据thismake_shared不支持此类功能(至少在C++17中不支持,据我所知):shared_ptrptr=make_shared(10);上面的代码显然是非法的。事实上,我的VisualStudio2017(v141)吐出以下错误:C2070:'int[]':illegalsizeofoperand'有趣的是shared_ptr本身确实支持数组

c++ - 如何编写用于从 C 访问 C++ 类成员的包装器(具有继承和构造函数)

在大多数问题中,我看到了一个没有构造函数、继承的简单类的包装器,只是调用了一个用于创建和销毁的void*以及一个foo函数。对于像下面这样的结构,应该如何创建一个包装器来从C代码访问类成员。myHeader.hforc++-------------------classchildA:publicparentA{private:voidlogger()override}classchildB:publicparentB{private:/*somemembers*/protected:/*somemembers*/public:explicitchildB(childA*a);}clas

c++ - 为什么 unique_ptr 不阻止自定义删除器的切片?

std::unique_ptr与自定义删除器的行为基于删除器的静态类型.没有多态性,没有基于运行时传递的实际删除器的运行时行为,因为提供的派生删除器被切片为声明的删除器的静态类型。(Itisdesignedthiswayinpurpose,toallowthesizeofunique_ptrwithdefaultdeleterorwithcustomdeleterwithoutanydatamembers,tohavesamesizeasarawpointer).带有自定义删除器的unique_ptr的静态行为:classA{};structBaseDeleter{virtualvoi

c++ - 我们如何使用#pragma 警告禁用链接器警告?

我们可以禁用编译器警告#pragmawarning(disable:4966)我们如何使用#pragma指令禁用链接器警告?像这样的东西://DisablelinkerwarningLNK4221#pragmawarning(disable:4221) 最佳答案 链接器警告不能放在源文件中,因为源文件(.CPP/.C/.H等)供编译器使用,而不供链接器使用。编译将从一个或多个文件中生成目标文件(通过一个或多个“翻译单元”)。如果您将#pramadisable_linker_warning放在某个源文件中-链接器设置应该转到哪个.OB

c++ - 如何在 C 中实现 RFC 3393(Ipdv 数据包延迟变化)?

我正在构建一个以太网应用程序,我将从一侧发送数据包并在另一侧接收数据包。我想像RFC3393中那样计算接收方数据包的延迟。所以我必须在发送方的数据包中放置一个时间戳,然后在接收方收到数据包后立即获取时间戳。减去这些值我将得到时间戳的差异,然后用后续差异减去这个值我将得到单向ipdv延迟。两个时钟不同步。所以非常感谢任何帮助。谢谢。 最佳答案 RFC3393用于测量数据包延迟的方差,而不是用于测量延迟本身。举个例子:您正在编写一个视频流应用程序。您希望缓冲尽可能少的视频数据(以便视频尽快开始播放)。假设数据总是总是总是从机器A到机器B

c++ - 哪种方法最适合从光驱中快速读取文件?

从硬盘读取文件时,mmap通常被认为是快速将数据存入内存的好方法。使用光驱时,访问需要更多时间,而且您需要担心更高的延迟。您使用什么方法/抽象来隐藏/消除尽可能多的光驱延迟和/或总加载时间? 最佳答案 您无法使用真正的抽象。光驱具有非常特殊的特性,必须对其进行优化才能获得最佳性能。一些提示:光驱的最大killer是寻道时间。在可能的情况下,确保您正在阅读的所有文件在光盘上都是按顺序排列的,并且尽可能紧密地排列在一起。如果你必须寻找,那么就朝一个方向寻找,并尽可能少地寻找。异步读取也可以极大地提高性能。如果您需要加载和处理文件A、B和

c++ - 帮助在 std::map 中存储模板类的 intrusive_ptr

我在boost::intrusive_ptr中包含一个Locker类型的小模板类,我想将其存储在std::map中:templateboolLockerManager::AddData(conststd::string&id,T*pData){boost::intrusive_ptr>lPtr(Locker(pData));//Line359-compilesmMap.insert(make_pair(id,lPtr));//Line361-giveserror}Locker只是一个容器类;它的构造函数看起来像:templateLocker::Locker(T*pData):Intru

c++ - 使用 GDB 在 Windows 下调试 DLL

我有一些项目由几个DLL组成,这些DLL是用MinGW编译的,带有调试信息,另一个项目的EXE目标使用这些DLL(也是用MinGW编译的)。问题是,我需要在那些DLL中的函数上放置断点,但是GDB虽然设置了断点,但只是在运行时默默地忽略了它们。进入它们(使用's'键)只是跳过它们(就像使用'n'键一样)。我怎样才能进入那些DLL?也许我应该为GDB指定一些选项?提前致谢。 最佳答案 确保使用gccoptimizationlevel进行编译标志设置为0(-O0)。 关于c++-使用GDB在

c# - 串行端口重定向或拆分

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion我正在寻找有关如何进行串行端口重定向或端口拆分的书籍和/或代码示例。我编写了很多com端口应用程序,并想编写一个监视器应用程序,使我能够监视应用程序和设备之间的串行端口。所以我希望能够将串行端口重定向到另一个端口,以便我可以监控端口之间的数据流动。我理解在某些情况下这必须在内核级别完成。(在USB情况下)我在C#中使用system.IO.Ports编写了监控应用程序。